<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="author" content="kfzjw008">
    
    <meta name="description" content="IT开发交流社区，新媒体制作交流平台，大学生竞赛相关信息，计算机相关学科必备">
    
    
    
    
    
    
    <title>【XML与webservice技术】webservice相关知识整理 | 几何军工作室</title>
    <!-- inject:style -->
    <link href="/css/style.css" rel="stylesheet" type="text/css">
    <!-- endinject -->
    <style>
        .cube-loading {
            top: 0;
            position: fixed;
            width: 100%;
            height: 100%;
            background: url('/images/lg/loading.gif') no-repeat center center;
            background-color: rgba(0,0,0,.7);
        }

        .cube-loading.out {
            display: none;
        }

        .cube-loading:before {
            display: block;
            content: '加载中';
            position: relative;
            width: 100%;
            top: 50%;
            right: -50%;
            color: #fff;
        }

        @media(max-width: 768px) {
            .cube-loading:before {
                font-size: 1.2em;
                transform: translate(-24px,20px);
                -webkit-transform: translate(-24px,20px);
                -o-transform: translate(-24px,20px);
                -ms-transform: translate(-24px,20px);
            }
        }

        @media(min-width: 768px) {
            .cube-loading:before {

            }
        }
    </style>
    
</head>
<body>
<div class="cube-body">
    <nav id="cube-top-memu" class="cube-menu">
    <ul class="cube-menu-collapse">
        
        <li>
            <i class="cube-icon cube-icon-home" aria-hidden="true"></i>
            <a href="/">首页</a>
        </li>
        
        <li>
            <i class="cube-icon cube-icon-categories" aria-hidden="true"></i>
            <a href="/categories">分类</a>
        </li>
        
        <li>
            <i class="cube-icon cube-icon-tags" aria-hidden="true"></i>
            <a href="/project">工程项目</a>
        </li>
        
        <li>
            <i class="cube-icon cube-icon-archive" aria-hidden="true"></i>
            <a href="/competition">学科竞赛</a>
        </li>
        
        <li>
            <i class="cube-icon cube-icon-archive" aria-hidden="true"></i>
            <a href="/zone">原创空间</a>
        </li>
        
        <li>
            <i class="cube-icon cube-icon-about" aria-hidden="true"></i>
            <a href="/about-me">关于我</a>
        </li>
        
    </ul>
</nav>
<nav class="cube-side-menu" id="cube-side-menu">
    <ul class="cube-menu-list">
        
        <li>
            <a class="lrc-control">开启歌词</a>
        </li>
        
        <li>
            <a class="scroll-to-top">回到顶部</a>
        </li>
    </ul>
</nav>
    <header class="cube-header" id="cube-header">
    <img src=" http://benyouhuifile.it168.com/forum/201204/20/154242hp8pmqm6t3izc8it.jpg " alt="头部背景图片">
    
    <div class="cube-type">
        <span class="cube-typed-title">几何军工作室</span>
        <span class="cube-typed-cursor">|</span>
    </div>
    
</header>

    <style>
        nav.cube-menu:before {
            content: '';
            visibility: hidden;
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 44px;
        
            filter: blur(5px);
            -webkit-filter: blur(5px);
        
            z-index: -1;
            background-image: url('http://benyouhuifile.it168.com/forum/201204/20/154242hp8pmqm6t3izc8it.jpg');
            background-repeat: no-repeat;
            background-position: center -356px;
            background-size: cover;
            background-color: transparent;
        }

        header.cube-background.cube-header-background {
            visibility: hidden;
            background-image: url('http://benyouhuifile.it168.com/forum/201204/20/154242hp8pmqm6t3izc8it.jpg');
            background-position: center -400px;
        }
    </style>
    <header class="cube-background cube-header-background">
        
        <div class="cube-type">
            <span class="cube-typed-title">几何军工作室</span>
            <span class="cube-typed-cursor">|</span>
        </div>
        
    </header>
    <div class="load-header-background"></div>
    <script>
        (function (window) {

            window.headerModule = {}
            window.headerModule.image = {
                width: '2000',
                height: '850'
            }

        })(window)
    </script>
    
    <div class="cube-content">
        <div class="cube-left">
            <div class="cube-article">
    <h1 class="title">【XML与webservice技术】webservice相关知识整理</h1>
    
    <div class="cube-article-header">
        <div class="cube-article-date">
            <i class="cube-icon cube-icon-date" aria-hidden="true"></i>
            <!-- moment.js对象 -->
            2018-11-11
            <span id="busuanzi_container_page_pv">
  本文总阅读量<span id="busuanzi_value_page_pv"></span>次
                   
</span>
        </div>
        <div class="cube-article-tags">
    <i class="cube-icon cube-icon-tag" aria-hidden="true"></i>
    
    <a href="/tags/期末复习/">#期末复习</a>
    
    <a href="/tags/WEB-Service/">#WEB Service</a>
    
    <a href="/tags/XML/">#XML</a>
    
</div>
    </div>
    
    
    <div class="cube-article-content cube-markdown">
        
        <h1 id="webservice相关知识整理"><a href="#webservice相关知识整理" class="headerlink" title="webservice相关知识整理"></a>webservice相关知识整理</h1><h2 id="概论"><a href="#概论" class="headerlink" title="概论"></a>概论</h2><p><strong>定义：</strong> Web service是一个平台独立的，低耦合的，自包含的、可编程的、能通过web访问的（web-enable）应用程序，可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序，用于开发分布式的互操作的应用程序。<br>即，一个能够使用XML消息通过网络来访问的服务, 这个服务通过Interface描述了一组可访问的操作。<br>服务的行为、输入/输出都可使用 <strong>WSDL</strong> 描述<br>适应松散耦合的网络环境，可通过Web访问，手段是 <strong>SOAP Message</strong> 。<br><a id="more"></a></p>
<p><strong>目标：</strong> 在现有的各种异构平台的基础上，构筑一个<strong>通用的，与应用无关、语言无关的技术层</strong> ，各种不同平台之上的应用依靠这个技术层来实施彼此的连接和集成。<br>Web Service则要解决如何让计算机系统来使用Web应用所提供的服务。</p>
<p><strong>应用：</strong> 互联设备，整合应用</p>
<p><strong>特点：</strong> </p>
<ul>
<li>良好的封装性<br>使用者仅看到Web Service提供的功能列表</li>
<li>松散耦合<br>只要接口不变，其使用方法就不会改变</li>
<li>使用标准协议规范<br>使用开放的标准协议进行描述、传输和交换</li>
<li>高度可互操作性<br>可以跨越平台、语言进行调用</li>
<li>高度可集成能力</li>
</ul>
<h2 id="Web-服务体系结构中的角色"><a href="#Web-服务体系结构中的角色" class="headerlink" title="Web 服务体系结构中的角色"></a>Web 服务体系结构中的角色</h2><ul>
<li><strong>服务提供者：</strong> 从企业的角度看，这是服务的所有者。从体系结构的角度看，这是托管访问服务的平台。 </li>
<li><strong>服务请求者：</strong> 从企业的角度看，这是要求满足特定功能的企业。从体系结构的角度看，这是寻找并调用服务，或启动与服务交互的应用程序。</li>
<li><strong>服务注册中心 ：</strong> 这是可搜索的服务描述注册中心，服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间，服务请求者查找服务并获得服务的绑定信息（在服务描述中）。<br>服务请求者也可以从服务注册中心以外的其它来源得到服务描述。</li>
</ul>
<h2 id="Web-服务体系结构中的操作"><a href="#Web-服务体系结构中的操作" class="headerlink" title="Web 服务体系结构中的操作"></a>Web 服务体系结构中的操作</h2><ul>
<li><strong>发布：</strong> 为了使服务可访问，需要发布服务描述以使服务请求者可以查找它。</li>
<li><strong>查找：</strong> 在查找操作中，服务请求者直接检索服务描述或在服务注册中心中查询所要求的服务类型。对于服务请求者，可能会在两个不同的生命周期阶段中牵涉到查找操作：<ul>
<li>在设计时为了程序开发而检索服务的接口描述，</li>
<li>在运行时为了调用而检索服务的绑定和位置描述。 </li>
</ul>
</li>
<li><strong>绑定：</strong> 最后需要调用服务。在绑定操作中，服务请求者使用服务描述中的绑定细节来定位、联系和调用服务，从而在运行时系统中调用或启动与服务的交互。</li>
</ul>
<h2 id="web服务过程"><a href="#web服务过程" class="headerlink" title="web服务过程"></a>web服务过程</h2><ul>
<li>服务提供者将所提供的服务发布到服务代理的一个目录上</li>
<li>服务请求者首先到服务代理提供的目录上搜索 服务，得到如何调用该服务的信息</li>
<li>根据得到的信息调用服务提供者提供的服务</li>
</ul>
<h2 id="web-service-协议栈"><a href="#web-service-协议栈" class="headerlink" title="web service 协议栈"></a>web service 协议栈</h2><p>soap-&gt;wsdl-&gt;uddi-&gt;wsfl</p>
<h3 id="SOAP"><a href="#SOAP" class="headerlink" title="SOAP"></a>SOAP</h3><p><strong>简介：</strong> SOAP是一种轻量级协议，用于在分散型、分布式环境中交换结构化信息。SOAP提供了一种基于 XML 且具有以下特性的消息处理框架。</p>
<p><strong>特点（重点，简答）：</strong> </p>
<ul>
<li>自由的传输绑定 (不仅仅是HTTP)</li>
<li>自由的语言绑定 (比如Java, C#)</li>
<li>可插入的数据格式 (当然必须基于XML)</li>
<li>完全的中立 (中立、公开的标准)</li>
<li>独立于任何编程语言、对象模型、操作系统、平台、协议</li>
</ul>
<p><strong>优点</strong><br>  简单性，SOAP所基于的XML具有高度的结构化，并且很容易解析。<br>可移植性：SOAP无须依赖底层平台，不需要考虑诸如字节顺序或计算机字长这类问题。<br>与防火墙的兼容性：soap可以穿过防火墙。<br>使用开放标准：SOAP使用XML开放标准来格式化数据。<br>互操作性：SOAP是建立在开放技术之上的，从而有利于实现真正的分布式互操作性和松耦合性的应用。<br>被广泛接受<br>适应变化：soap基础架构的变化通常不会影响到该协议的应用。</p>
<p><strong>缺点</strong><br>SOAP最初仅限于HTTP，采用了并不适合所有情况的请求/应答体系结构。HTTP是一个相当慢的协议，从而影响了SOAP的性能<br>Soap是无状态的，然而在一些业务处理和事务中，多个webservice之间需要相互交互，这是就需要维护连接的状态。<br>SOAP基于值的串行化，而不支持基于引用的串行化。基于值的串行化允许对象的多个副本含有的状态不同步。这就意味着soap上不能以对象引用的形式引用一些外部数据源。</p>
<p><strong>语法规则：</strong></p>
<ul>
<li>SOAP消息必须用XML来编码</li>
<li>SOAP消息必须使用SOAP Envelope命名空间</li>
<li>SOAP消息不能包含DTD引用</li>
<li>SOAP消息不能包含XML处理指令</li>
<li>该元素可以包含命名空间声明和额外的属性，如果声明额外的属性，必须使用命名空间修饰。</li>
<li>Envelope可以包含额外的子元素，但必须使用命名空间修饰并且跟在SOAP Body元素之后。</li>
</ul>
<p><strong>分布式消息传送</strong><br>1、SOAP客户端应用程序创建一个SOAP消息XML文档进行请求。这个消息包含远程调用分布式系统中的方法所需的信息。包含请求的方法和参数。<br>2、网络基础设施将消息发送给消息提供者的soap服务器。<br>3、soap服务器将请求消息发送给服务提供者的Webservice实现代码。Soap服务器确保将所收到的文档从XML转换为特定的编程语言对象。SOAP消息中的编码模式将决定如何转换。<br>4、SOAP响应消息被转交给服务提供者的SOAP运行时系统，并以服务请求者的URI作为目的地。<br>5、soap服务器通过网络将soap响应消息转发给服务请求者。<br>6、在服务请求节点上的网络基础设施接收响应消息，并可以转换为应用程序能理解的对象。</p>
<p><strong>消息交换模型</strong></p>
<ul>
<li>单向传送模型：该模型将 XML 消息从发送者传送到接收者。</li>
<li>请求/响应模型：接收方向发送方发送响应消息</li>
<li>增加可选的“SOAP中介（intermediary）”：用来在 SOAP 发送者和最终 SOAP 接收者之间截取 SOAP 消息。</li>
</ul>
<p><strong>SOAP消息结构</strong><br>message-&gt;envelope-&gt;header/body-&gt;fault<br><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;?XML version=“1.0”?&gt;</span><br><span class="line"><span class="tag">&lt;<span class="name">soap-env:Envelop</span> <span class="attr">xmlns:</span> <span class="attr">soap-env</span>=<span class="string">"http://schemas.xmlsoap.org/soap/envelope/"</span></span></span><br><span class="line"><span class="tag"><span class="attr">soap-env:encodingStyle</span>=<span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span>&gt;</span></span><br><span class="line">         <span class="tag">&lt;<span class="name">soap-env:Header</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;<span class="name">!–</span> 报头定义 <span class="attr">--</span>&gt;</span></span><br><span class="line">          <span class="tag">&lt;/<span class="name">soap-env:Header</span>&gt;</span></span><br><span class="line">          <span class="tag">&lt;<span class="name">soap-env:body</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;<span class="name">!–</span> 消息定义 <span class="attr">--</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;<span class="name">soap-env:Fault</span>&gt;</span></span><br><span class="line">                         <span class="tag">&lt;<span class="name">!–</span> 相关错误处理信息 <span class="attr">--</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;/<span class="name">soap-env:Fault</span>&gt;</span></span><br><span class="line">          <span class="tag">&lt;/<span class="name">soap-env:body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">soap-env:Envelope</span>&gt;</span></span><br></pre></td></tr></table></figure></p>
<p><strong>1、soap envelope</strong><br>SOAP Envelope （信封）是SOAP消息结构的主要容器，也是SOAP消息的根元素。必须出现在每个SOAP消息中，用于把此XML文档标识为一条SOAP消息.在SOAP中，使用XML命名空间将SOAP标识符与应用程序的特定标识符区分开，将SOAP的消息的元素的作用域限制在一个特定的领域。<br><strong>2、soap header</strong><br>Header的目的就是对扩展的消息格式进行封装，且无需与有效载荷发生关联，也不需要修改soap的基本结构，因此soap消息可以通过header不断添加新的特性和功能，例如安全性、事务等。<br>可以在消息的头部存放扩展数据，从而使得服务中的每个方法调用无须将那个数据作为方法的参数。<br>Header元素允许在头部放置数量不限子元素，这些子元素称为头块，表示一个数据的逻辑分组。<br>每一个头块都有自己的命名空间。<br>soap中介<br>soap env：role属性<br>mustunderstand属性<br>actor属性<br><strong>3、soapbody</strong><br>SOAP Body（主体）元素作为子元素包含在SOAP信封中，且包含：<br>RPC方法及其参数<br>目标应用程序（消息接收者）专用数据<br>报告故障和状态信息的SOAP故障（FAULT）<br>  在SOAP消息中，所有的Body元素必须是SOAP Envelope元素的直接子元素。</p>
<p><strong>4、soap fault</strong><br>SOAP Fault（错误）元素用于在SOAP消息中传输错误及状态信息。如果SOAP消息需要包括SOAP Fault元素，它必须作为一个Body项出现，而且至多出现一次。<br><strong>Faultcode：</strong> 标识故障，包含用于标识该SOAP应用程序的故障或状态的标准值。这些Faultcode<br>值的命名空间标识符在<a href="http://schemas.xmlsoap.org/soap/envelope/" target="_blank" rel="noopener">http://schemas.xmlsoap.org/soap/envelope/</a> 中定义。<br><strong>Faultstring：</strong> 提供SOAP故障的可读描述<br><strong>Faultactor：</strong> 描述在消息路径中错误的引发者。类似于SOAP actor 属性，不过它记录的不是Header的接收者，而是指示错误源。<br><strong>Detail：</strong> 该元素提供与已定义的Body块相关的，特定于应用程序的故障或状态信息。 Detail的所有直接子元素都称为detail项。</p>
<p><strong>soap通信模型</strong><br>Soap支持两类通信方式： <strong>RPC(远程过程调用 )类型和文档类型。</strong><br><strong>RPC类型的webservice</strong><br>表现为客户端应用的一个远程对象。<br>客户端将请求表达成带有参数的方法调用，返回的响应将包含返回值。</p>
<p><strong>文档类型(document)的webservice</strong><br>消息驱动<br>可以使用soap来交换文档，这些文档可以包含任何类型的XML数据。<br>SOAP并不提供任何方式将源和目的地信息编码到信封当中。对于webservice而言，webservice基础设施决定将SOAP消息发送到哪里，如何发送。<br>在文档型SOAP应用中，对于SOAPbody元素的内容没有限制。<br><strong>与RPC类型不同，文档类型不支持消息的自动串行化/逆串行化。</strong></p>
<h3 id="WSDL"><a href="#WSDL" class="headerlink" title="WSDL"></a>WSDL</h3><p><strong>概述</strong><br>Web 服务描述语言（Web Services Description Language，WSDL）是用于描述Web服务的一种XML语言；是一种定义在Web上的对象，Web Service的开发者需要对服务的调用方式进行某种结构化的说明，以便服务的调用者能够正确的使用这些服务。<br>WSDL规范实际上分为两部分:服务接口定义和服务实现。<br><strong>元素构成与作用</strong></p>
<table><br><tr><br><th>元素名称</th><br><th>元素的作用</th><br></tr><br><tr><br><td>definitions</td><br><td>根元素，定义名称，声明命名空间</td><br></tr><br><tr><br><td>types</td><br><td>描述webservice与调用者之间使用的数据类型</td><br></tr><br><tr><br><td>message</td><br><td>消息的逻辑定义</td><br></tr><br><tr><br><td>operation</td><br><td>所支持的操作的抽象定义</td><br></tr><br><tr><br><td>porttype</td><br><td>某个访问点所支持的所有操作的抽象的定义</td><br></tr><br><tr><br><td>binding</td><br><td>特定porttype定义的操作和消息格式协议之间的绑定</td><br></tr><br><tr><br><td>port</td><br><td>webservice绑定地址</td><br></tr><br><tr><br><td>service</td><br><td>相关服务访问的集合</td><br></tr><br></table>

<p><strong>use属性取值</strong><br>为:encoded or literal<br>在“encoded”的情况下，抽象的定义通过应用SOAP编码规则转换成具体格式。<br>在“literal”的情况下，抽象类型定义本身成为具体定义（它们是“literal”定义）。在这种情况下，您可以简单地检查XML架构类型定义，以确定具体的消息格式。 </p>
<p><strong>抽象与具体实现</strong><br>&lt; serv ice&gt;（服务）元素指定了Web Service的位置。一个&lt; service&gt;元素可以包含多个&lt; port&gt;（端口）元素，端口的集合构成了service。<br>Binding元素包含如何将抽象服务接口（portType）映射到具体的表示，包括具体的协议（SOAP or HTTP），消息传输类型（RPC or documents）和编码方式（literal or SOAP encoding）<br>一个可以包含多个端口，这些端口全部使用相同的portType，这就意味着对于多个不同的服务提供者所提供的同一个服务接口，可以有多个服务实现。这些服务实现有不同的绑定和地址。</p>
<p><strong>WSDL的消息传输模式</strong><br><strong>单向操作</strong><br>单向操作时服务端点接收消息的一种操作，但该操作并不发送一个响应。<br>例如，将一个订单提交给订购系统的操作可以是一个单向操作。在发送订单之后，并不期待会立即有一个响应。<br>单向消息仅定义一个输入消息，既不需要输出消息，也不需要出错消息。<br><strong>请求响应操作</strong><br>服务端接收一个消息，并返回一个响应。<br><strong>通知操作</strong><br>服务端口将消息发送给客户端，但不期待一个响应；<br>在portType元素中包含一个out标签，但没有input消息的定义。<br><strong>要求响应操作</strong><br>服务端发送一个消息并期待收到一个响应消息；<br>服务端点发起这个操作，而不是响应客户端的请求；<br>portType先声明一个output标签，然后声明一个input消息；</p>
<p>###UDDI<br>UDDI 是一种目录服务，企业可以使用它对 Web services 进行注册和搜索。<br>UDDI两个操作：Web Service的描述与注册</p>
<h2 id="使用webservice过程"><a href="#使用webservice过程" class="headerlink" title="使用webservice过程"></a>使用webservice过程</h2><ol>
<li>开发新应用</li>
<li>查询UDDI</li>
<li>定位Web服务、下载其描述</li>
<li>根据描述创建Java client proxy </li>
<li>在应用中编写调用Java client proxy methods 代码</li>
<li>测试应用</li>
<li>Java client proxy通过SOAP调用Web service methods</li>
</ol>
<h2 id="编写服务端实例"><a href="#编写服务端实例" class="headerlink" title="编写服务端实例"></a>编写服务端实例</h2><p>（1）创建一个Web工程<br>（2）引入CXF jar包 apache-cxf-2.7.17<br>把前面下载的CXF包解压，进入lib目录。把所有jar包拷贝到刚创建的Web工程的lib目录。<br>（3）开发一个Web Service业务接口。<br>     该接口要用@WebService修饰<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com;</span><br><span class="line"><span class="keyword">import</span> javax.jws.WebService;</span><br><span class="line"><span class="meta">@WebService</span>(targetNamespace=<span class="string">"http://service.demo.ws/"</span>)</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">Login</span> </span>&#123;</span><br><span class="line">	<span class="function">String <span class="title">login</span><span class="params">(String name,String password)</span></span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>
<p>（3）开发一个Web Service实现类<br>     实现类也需要用@WebService修饰<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com;</span><br><span class="line"><span class="keyword">import</span> javax.jws.WebService;  </span><br><span class="line"><span class="meta">@WebService</span>(endpointInterface = <span class="string">"com.Login"</span>, serviceName = <span class="string">"LoginService"</span>)</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">LoginImpl</span> <span class="keyword">implements</span> <span class="title">Login</span> </span>&#123; </span><br><span class="line">  <span class="function"><span class="keyword">public</span> String <span class="title">login</span><span class="params">(String name, String password)</span> </span>&#123;  </span><br><span class="line">    String result = <span class="string">"登录CXF 服务端成功!"</span>;   </span><br><span class="line">     <span class="keyword">if</span> (!<span class="string">"cxf"</span>.equalsIgnoreCase(name) || !<span class="string">"cxf"</span>.equalsIgnoreCase(password)) &#123;</span><br><span class="line">         result = <span class="string">"用户名或密码不正确，请重新登录!"</span>;   </span><br><span class="line">  &#125; </span><br><span class="line">   <span class="keyword">return</span> result; </span><br><span class="line">    &#125;  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>
<p>（5）使用EndPoint类的静态方法来发布WebService</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span>  javax.xml.ws.Endpoint;  </span><br><span class="line">  </span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">webServiceApp</span> </span>&#123;  </span><br><span class="line">  </span><br><span class="line">    <span class="comment">/** </span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> args </span></span><br><span class="line"><span class="comment">     */</span>  </span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;  </span><br><span class="line">         System.out.println(<span class="string">"web service start"</span>);  </span><br><span class="line">	     LoginImpl implementor = <span class="keyword">new</span> LoginImpl();  </span><br><span class="line">         String address = <span class="string">"http://localhost:8080/CXF/Login"</span>;  </span><br><span class="line">         Endpoint.publish(address, implementor);  </span><br><span class="line">         System.out.println(<span class="string">"web service started"</span>);  </span><br><span class="line">    &#125;  </span><br><span class="line">  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>注：可以编写一个Java类进行发布，也可以使用Servlet进行发布</p>

    </div>
</div>

<div class="cube-article-nav">
    <ul>
        
        <li class="prev">
            <a href="/2018/11/12/2023/">
                <i class="cube-icon cube-prev" aria-hidden="true"></i>
                【XML与webservice技术】期末复习大纲
            </a>
        </li>
        
        
        <li class="next">
            <a href="/2018/11/07/2021/">
                【蓝桥杯】新征程，最后一战
                <i class="cube-icon cube-next" aria-hidden="true"></i>
            </a>
        </li>
        
    </ul>
</div>


<!-- TODO 根据theme.comment的内容进行入口选择 -->


<!-- Table of Contents -->

        </div>
        <div class="cube-right">
            

<div class="cube-search cube-sidebar" id="cube-search">
    <div class="search-container">
        <input type="text" placeholder="搜索" class="cube-search-input" id="cube-search-input">
        <i class="cube-icon cube-icon-search cube-search-submit" aria-hidden="true"></i>
    </div>
    <!-- TODO 通过给window赋一个全局变量，通过脚本赋值 -->
</div>
<script>
    (function (window) {
        'use strict';
        window.searchModule = {}
        window.searchModule.JSONUrl = '/content.json'
        window.searchModule.rootUrl = '/'
    })(window)
</script>
<div class="cube-search-form">
    <div class="cube-search-control">
        <input type="text" placeholder="搜索" class="search-input">
        <a class="close-button">
            <i class="cube-icon cube-close" aria-hidden="true"></i>
        </a>
    </div>
    <div class="cube-search-result"></div>
</div>


<div class="cube-author cube-sidebar" id="cube-author">
    
    
    <span>kfzjw008</span>
    
    
    <a title="IT开发交流社区，新媒体制作交流平台，大学生竞赛相关信息，计算机相关学科必备">IT开发交流社区，新媒体制作交流平台，大学生竞赛相关信息，计算机相关学科必备</a>
    
    <div class="count">
        <a class="count articles"><span>25</span>文章</a>
        <a class="count tags"><span>22</span>标签</a>
        <a class="count categories"><span>7</span>分类</a>
    </div>
</div>



<div class="cube-music cube-sidebar" id="cube-music">
    <div class="cube-player aplayer" id="cube-player"></div>
</div>
<script>
    (function (window) {
        window.musicModule = {}
        window.musicModule.musicConfig = '{"narrow":false,"autoplay":true,"showlrc":3,"theme":"#b7daff","mutex":true,"mode":"circulation","preload":"auto","listmaxheight":"513px","music":[{"title":"光明","author":"汪峰","url":"http://47.95.213.193/mp3data/%e5%85%89%e6%98%8e-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://47.95.213.193/mp3data/%e6%b1%aa%e5%b3%b02017%e7%bb%8f%e5%85%b8%e6%ad%8c%e6%9b%b2%e6%96%b0%e7%bc%96%e7%b2%be%e9%80%89%e9%9b%86I.jpg"},{"title":"不羁的生命","author":"汪峰","url":"http://47.95.213.193/mp3data/%e4%b8%8d%e7%be%81%e7%9a%84%e7%94%9f%e5%91%bd-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://47.95.213.193/mp3data/%e6%b1%aa%e5%b3%b02017%e7%bb%8f%e5%85%b8%e6%ad%8c%e6%9b%b2%e6%96%b0%e7%bc%96%e7%b2%be%e9%80%89%e9%9b%86I.jpg"},{"title":"上千个黎明","author":"汪峰","url":"http://47.95.213.193/mp3data/%e6%b1%aa%e5%b3%b0-%e4%b8%8a%e5%8d%83%e4%b8%aa%e9%bb%8e%e6%98%8e.mp3","pic":"http://47.95.213.193/mp3data/%e6%b1%aa%e5%b3%b02017%e7%bb%8f%e5%85%b8%e6%ad%8c%e6%9b%b2%e6%96%b0%e7%bc%96%e7%b2%be%e9%80%89%e9%9b%86I.jpg"},{"title":"信仰在空中飘扬","author":"汪峰","url":"http://47.95.213.193/mp3data/%e4%bf%a1%e4%bb%b0%e5%9c%a8%e7%a9%ba%e4%b8%ad%e9%a3%98%e6%89%ac-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://yoursite.com/images/music/null"},{"title":"像梦一样自由","author":"汪峰","url":"http://47.95.213.193/mp3data/%e5%83%8f%e6%a2%a6%e4%b8%80%e6%a0%b7%e8%87%aa%e7%94%b1-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://yoursite.com/images/music/null"},{"title":"怒放的生命","author":"汪峰","url":"http://47.95.213.193/mp3data/%e6%80%92%e6%94%be%e7%9a%84%e7%94%9f%e5%91%bd-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://yoursite.com/images/music/null"},{"title":"大桥上","author":"汪峰","url":"http://47.95.213.193/mp3data/%e6%b1%aa%e5%b3%b0%20-%20%e5%a4%a7%e6%a1%a5%e4%b8%8a.mp3","pic":"http://yoursite.com/images/music/null"},{"title":"流年啊，你奈我何","author":"汪峰","url":"http://47.95.213.193/mp3data/%e6%b5%81%e5%b9%b4%e5%95%8a%20%e4%bd%a0%e5%a5%88%e6%88%91%e4%bd%95-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://yoursite.com/images/music/null"},{"title":"生来彷徨","author":"汪峰","url":"http://47.95.213.193/mp3data/%e7%94%9f%e6%9d%a5%e5%bd%b7%e5%be%a8-%e6%b1%aa%e5%b3%b0.mp3","pic":"http://yoursite.com/images/music/null"}]}'
        window.musicModule.lrcConfig = {
            open: '开启歌词',
            close: '关闭歌词'
        }
    })(window)
</script>



<div class="cube-recent-posts cube-sidebar" id="cube-recent-posts">
    <div class="title">
        <a>近期文章</a>
    </div>
    <ul class="list">
        
        
        <li>
            <!-- TODO 如果文章要显示图片，那么在front-matter上添加preview属性(url or path) -->
            
            <div class="normal">
                <p class="index first">
                    <span>1</span>
                </p>
                <p class="title">
                    <a href="/2019/03/27/2038/" title="JAVA学习笔记(2)-spring MVC">JAVA学习笔记(2)-spring MVC</a>
                </p>
            </div>
            
        </li>
        
        
        
        <li>
            <div class="normal">
                <p class="index">
                    <span>2</span>
                </p>
                <p class="title">
                    <a href="/2019/03/25/2036/" title="JAVA学习笔记">JAVA学习笔记</a>
                </p>
            </div>
        </li>
        
        
        
        <li>
            <div class="normal">
                <p class="index">
                    <span>3</span>
                </p>
                <p class="title">
                    <a href="/2019/03/25/2037/" title="设计模式学习笔记-01">设计模式学习笔记-01</a>
                </p>
            </div>
        </li>
        
        
        
        <li>
            <div class="normal">
                <p class="index">
                    <span>4</span>
                </p>
                <p class="title">
                    <a href="/2019/03/23/2035/" title="蓝桥杯比赛前夜-知识总结">蓝桥杯比赛前夜-知识总结</a>
                </p>
            </div>
        </li>
        
        
        
        <li>
            <div class="normal">
                <p class="index">
                    <span>5</span>
                </p>
                <p class="title">
                    <a href="/2019/03/21/2034/" title="建立友好合作博客的方式">建立友好合作博客的方式</a>
                </p>
            </div>
        </li>
        
        
    </ul>
</div>



<div class="cube-categories cube-sidebar" id="cube-categories">
    <div class="title">
        <a href="/categories">分类</a>
    </div>
    <div class="cube-boxs">
        
        
        <div class="cube-box-bg ">
            <a href="/categories/WEB开发/">#WEB开发</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/categories/蓝桥杯/">#蓝桥杯</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/categories/XML/">#XML</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/categories/数据库/">#数据库</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/categories/博客公告/">#博客公告</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/categories/设计模式/">#设计模式</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/categories/JAVA/">#JAVA</a>
        </div>
        
    </div>
</div>



<div class="cube-tagcloud cube-sidebar" id="cube-tagcloud">
    <div class="title">
        <a href="/tags">标签云</a>
    </div>
    <div class="cube-boxs">
        
        
        <div class="cube-box ">
            <a href="/tags/servlet/">#servlet</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/期末复习/">#期末复习</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/HTML/">#HTML</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/CSS/">#CSS</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/前端/">#前端</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/算法/">#算法</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/蓝桥杯/">#蓝桥杯</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/随笔/">#随笔</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/jQuery/">#jQuery</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/JavaScript/">#JavaScript</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/WEB-Service/">#WEB Service</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/XML/">#XML</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/题解/">#题解</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/数据库/">#数据库</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/MYSQL/">#MYSQL</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/BLOG/">#BLOG</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/HEXO/">#HEXO</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/设计模式/">#设计模式</a>
        </div>
        
        
        <div class="cube-box-bg ">
            <a href="/tags/JAVA/">#JAVA</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/UML/">#UML</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/软件体系结构/">#软件体系结构</a>
        </div>
        
        
        <div class="cube-box ">
            <a href="/tags/Spring-MVC/">#Spring MVC</a>
        </div>
        
    </div>
</div>



<div class="cube-links cube-sidebar" id="cube-links">
    <div class="title">
        <a>个人链接</a>
    </div>
    <ul class="list">
        
        <li>
            
            
            <img src="http://cube-1252774894.cosgz.myqcloud.com/links/GitHub.png">
            
            <a href="https://github.com/kfzjw008" target="_blank">我的GitHub</a>
        </li>
        
        <li>
            
            
            <img src="https://www.csdn.net/company/img/csdn-logo.svg">
            
            <a href="https://blog.csdn.net/kfzjw008" target="_blank">我的CSDN</a>
        </li>
        
        <li>
            
            
            <img src="http://cube-1252774894.cosgz.myqcloud.com/links/SF.png">
            
            <a href="https://47.95.213.193" target="_blank">我的个人主页</a>
        </li>
        
        <li>
            
            
            <img src="https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=fc01334b798b4710ce2ffacafbf5a4c0/1b4c510fd9f9d72a26f9db77df2a2834349bbb3f.jpg">
            
            <a href="https://www.zhihu.com/people/zhang-jun-wei-81-7/activities" target="_blank">我的知乎主页</a>
        </li>
        
    </ul>
</div>



<div class="cube-friend-links cube-sidebar" id="cube-friend-links">
    <div class="title">
        <a>友情链接</a>
    </div>
    <ul class="list">
        
        <li>
            <!-- TODO change avatar.png to friend.png-->
            <img src="http://cube-1252774894.cosgz.myqcloud.com/friend_links/micblo.png">
            <a href="https://github.com/MajorBill-Liu" target="_blank">MajorBill-Liu 的github</a>
        </li>
        
        <li>
            <!-- TODO change avatar.png to friend.png-->
            <img src="/images/friend_links.jpg ">
            <a href="https://kfzjw008.github.io/" target="_blank">此位置招租</a>
        </li>
        
        <li>
            <!-- TODO change avatar.png to friend.png-->
            <img src="/images/friend_links.jpg ">
            <a href="https://kfzjw008.github.io/" target="_blank">此位置招租</a>
        </li>
        
    </ul>
</div>


        </div>
    </div>
</div>
<footer class="cube-footer">
    
© 2017 kfzjw008

<br>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>.&nbsp;Theme by <a href="https://github.com/ZEROKISEKI" target="_blank">AONOSORA</a>
<span id="busuanzi_container_site_pv">
    本站总访问量<span id="busuanzi_value_site_pv"></span>次
</span>


</footer>
<!-- inject:script -->
<script src="/js/script.js"></script>
<!-- endinject -->
<div class="cube-loading out"></div>
</body>
</html>